package com.atguigu.gmall.search.controller;

import com.atguigu.gmall.common.bean.ResponseVo;
import com.atguigu.gmall.search.service.SearchService;
import com.atguigu.gmall.search.vo.SearchParamVo;
import com.atguigu.gmall.search.vo.SearchResponseVo;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.util.Arrays;

/*
@RestController:
        所有的接口方法返回的内容都会被转为json字符串响应
@Controller：
        接口方法如果没有标注@ResponseBody注解  返回的内容会被当做视图名称转发
 */
@Controller
@RequestMapping("search")
public class SearchController {
/*
    处理搜索页面中查询商品的请求：
    keyword代表搜索的关键字
    psort代表排序方式
    stock代表是否有库存
    cid3代表三级分类
    pvid品牌id
    ev： 检索属性和值的组合
    search?keyword=%E5%B0%8F%E7%B1%B3&psort=3
    &wq=%E5%B0%8F%E7%B1%B3&ev=exbrand_%E5%B0%8F%E7%B1%B3%EF%BC%88MI%EF%BC%89%7C%7C%E8%B5%A3%E9%A6%99%E5%A9%86%5Eexprice_3000-10000%5E3751_85353%7C%7C90887%5E5_183890%7C%7C187796%7C%7C154916%5E
    &pvid=83821cf7d7394b8eb9c8cb364334a9d1
    &cid3=655&cid2=653&stock=1
  接受页面传递过来的检索参数
  search?keyword=小米   查询关键字
      &brandId=1,3     品牌列表
      &cid=225      分类id
      &props=5:高通-麒麟
      &props=6:骁龙865-硅谷1000   检索属性和值列表(props:  值由 检索属性的id和选中的检索属性的值组成   )
                遍历props集合，每一个prop 都使用:分隔字符串， 再使用-分隔值前面分隔后的第二部分
      &sort=1  排序字段：0-默认，得分降序；1-按价格升序；2-按价格降序；3-按创建时间降序；4-按销量降序
      &priceFrom=1000 价格起始值
      &priceTo=6000  价格结束值
      &pageNum=1   页码
      &store=true  是否有库存
 */

    @Autowired
    SearchService searchService;
    @ApiOperation("搜索页条件查询es数据")
    @GetMapping
    public String search(SearchParamVo paramVo,Model  model,HttpServletRequest request){//paramVo不可能为空，springmvc一定会创建SearchParamVo的对象 再解析接收请求参数
        String userId = request.getHeader("userId");
        System.out.println("userId = " + userId);
        SearchResponseVo response = searchService.search(paramVo);
        model.addAttribute("response",response);
        model.addAttribute("searchParam" , paramVo);
        return "search";
    }


    @GetMapping("hello.html")
    public String hello(Model model, HttpSession session){
        model.addAttribute("k1","v1");
        model.addAttribute("k2" , ResponseVo.fail("k2.msg"));
        model.addAttribute("k3" , Arrays.asList(ResponseVo.ok("k3.1"),
                ResponseVo.fail("k3.2"),ResponseVo.ok("k3.3")));
        session.setAttribute("k4" , "v4");
        // classpath:/templates/hehe.html
        return "hehe";
    }
}
